Red Hat System Administration II 8.2

Управление областью подкачки

Задачи

После завершения этого раздела вы сможете создать области подкачки как дополнение к физической памяти и управлять ими.

Концепция области подкачки

Область подкачки — это область на диске, которой управляет подсистема управления памятью ядра Linux. Ядро использует области подкачки для дополнения оперативной памяти (ОЗУ) системы, размещая в них неактивные страницы памяти. ОЗУ и область подкачки вместе формируют виртуальную память.

Если объем используемой памяти системы превышает установленное ограничение, ядро ищет в ОЗУ неактивные страницы, назначенные процессам. Ядро записывает неактивные страницы в область подкачки и назначает освободившиеся страницы ОЗУ другим процессам. Если программе требуется доступ к странице на диске, ядро находит другую неактивную страницу памяти, записывает ее на диск, а затем загружает требуемую страницу из области подкачки.

Поскольку области подкачки находятся на диске, подкачка работает медленнее по сравнению с ОЗУ. Хотя область подкачки используется для дополнения ОЗУ системы, не следует считать данный механизм самодостаточным решением, если ОЗУ в вашей системе не хватает для рабочих нагрузок.

Определение размера области подкачки

Администратор должен задавать размер области подкачки в соответствии с нагрузкой на память в системе. Поставщики приложений иногда предоставляют соответствующие рекомендации. В следующей таблице приведены некоторые рекомендации, основанные на общем объеме физической памяти.

Таблица 6.1. Рекомендации по ОЗУ и области подкачки

ОЗУ Область подкачки Область подкачки, если разрешена гибернация
2 ГиБ или меньше В два раза больше, чем ОЗУ В три раза больше, чем ОЗУ
От 2 до 8 ГиБ Как ОЗУ В два раза больше, чем ОЗУ
От 8 до 64 ГиБ Не менее 4 ГиБ ОЗУ x 1,5
Больше 64 ГиБ Не менее 4 ГиБ Гибернация не рекомендуется

Функция гибернации на ноутбуках и настольных компьютерах сохраняет содержимое ОЗУ в области подкачки перед выключением системы. При последующем включении системы ядро восстанавливает содержимое ОЗУ из области подкачки и не выполняет полную загрузку. Для таких систем размер области подкачки должен быть больше размера ОЗУ.

В статье базы знаний, указанной в справочных материалах в конце этого раздела, приведены дополнительные рекомендации по определению размера области подкачки.

Создание области подкачки

Чтобы создать область подкачки, необходимо:

  • создать раздел с типом файловой системы linux-swap;

  • инициализировать раздел как область подкачки.

Создание раздела подкачки

С помощью команды parted создайте раздел нужного размера и задайте для него тип файловой системы linux-swap. В прошлом различные утилиты считывали тип файловой системы раздела, чтобы определить, следует ли активировать устройство, однако теперь это не так. Хотя утилитам больше не требуется знать тип файловой системы раздела, с его помощью администраторы могут быстро определить назначение раздела.

В следующем примере создается раздел размером 256 МБ.

[root@host ~]# parted /dev/vdb
GNU Parted 3.2
Using /dev/vdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  1001MB  1000MB               data

(parted) mkpart
Partition name?  []? swap1
File system type?  [ext2]? linux-swap
Start? 1001MB
End? 1257MB
(parted) print
Model: Virtio Block Device (virtblk)
Disk /dev/vdb: 5369MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system     Name   Flags
 1      1049kB  1001MB  1000MB                  data
 2      1001MB  1257MB  256MB   linux-swap(v1)  swap1

(parted) quit
Information: You may need to update /etc/fstab.

[root@host ~]# 

После создания раздела выполните команду udevadm settle. Она ждет, пока система обнаружит новый раздел и создаст соответствующий файл устройства в каталоге /dev. Команда возвращает управление только после завершения всех операций.

[root@host ~]# udevadm settle
[root@host ~]# 

Форматирование устройства

Команда mkswap создает на устройстве сигнатуру подкачки. В отличие от других утилит форматирования, mkswap записывает один блок данных в начале устройства, оставляя остальную часть неформатированной, чтобы ядро могло использовать ее для хранения страниц памяти.

[root@host ~]# mkswap /dev/vdb2
Setting up swapspace version 1, size = 244 MiB (255848448 bytes)
no label, UUID=39e2667a-9458-42fe-9665-c5c854605881

Активация области подкачки

Используйте команду swapon для активации отформатированной области подкачки.

Используйте команду swapon с именем устройства в качестве параметра либо команду swapon -a, чтобы активировать все области подкачки, указанные в файле /etc/fstab. Используйте команды swapon --show и free для просмотра сведений о доступных областях подкачки.

[root@host ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1873036      134688     1536436       16748      201912     1576044
Swap:             0           0           0
[root@host ~]# swapon /dev/vdb2
[root@host ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1873036      135044     1536040       16748      201952     1575680
Swap:        249852           0      249852

Отключить область подкачки можно с помощью команды swapoff. Если в область подкачки записаны страницы, команда swapoff попытается переместить эти страницы в другие активные области подкачки или обратно в память. Если команда swapoff не сможет записать данные в другие места, она завершится ошибкой, а область подкачки останется активной.

Активация области подкачки на постоянной основе

Чтобы область подкачки активировалась каждый раз при загрузке системы, добавьте соответствующую запись в файл /etc/fstab. В примере ниже показана типичная строка в файле /etc/fstab для созданной выше области подкачки.

UUID=39e2667a-9458-42fe-9665-c5c854605881   swap   swap   defaults   0 0

В первом поле в этом примере указан UUID. Команда mkswap отображает этот UUID, когда вы форматируете устройство. Если вывода mkswap больше нет, используйте команду lsblk --fs. Кроме того, в первом поле можно использовать имя устройства.

Во втором поле обычно указывается точка монтирования. Однако для устройств подкачки, которые недоступны через структуру каталогов, это поле принимает заполнитель со значением swap. На man-странице fstab(5) используется заполнитель со значением none, однако использование значения swap позволяет получать более информативные сообщения об ошибках, если что-то пошло не так.

Третье поле — тип файловой системы. Тип файловой системы для области подкачки — swap.

Четвертое поле предназначено для опций. В этом примере используется опция defaults. Опция defaults включает опцию монтирования auto, которая автоматически активирует область подкачки при загрузке системы.

Последние два поля — это бит dump и порядок выполнения fsck. Для областей подкачки не требуется резервное копирование или проверка файловой системы, поэтому в этих полях необходимо указать 0.

После добавления или удаления записи в файле /etc/fstab необходимо выполнить команду systemctl daemon-reload или перезагрузить сервер, чтобы демон systemd зарегистрировал новую конфигурацию.

[root@host ~]# systemctl daemon-reload

Указание приоритета области подкачки

По умолчанию система использует области подкачки последовательно. То есть ядро сначала использует первую активированную область подкачки, пока она не заполнится, после чего начинает использовать вторую область. Вы можете изменить порядок областей подкачки, назначив им приоритеты.

Чтобы указать приоритет, задайте опцию pri в файле /etc/fstab. Ядро сначала использует область подкачки с наивысшим приоритетом. Приоритет по умолчанию ― -2.

В следующем примере показаны три области подкачки, заданные в файле /etc/fstab. Сначала ядро использует последнюю запись с приоритетом pri=10. После заполнения этой области используется вторая запись с приоритетом pri=4. Последней используется первая запись с приоритетом по умолчанию -2.

UUID=af30cbb0-3866-466a-825a-58889a49ef33   swap   swap   defaults  0 0
UUID=39e2667a-9458-42fe-9665-c5c854605881   swap   swap   pri=4     0 0
UUID=fbd7fa60-b781-44a8-961b-37ac3ef572bf   swap   swap   pri=10    0 0

Используйте команду swapon --show для отображения приоритетов областей подкачки.

Если у нескольких областей подкачки одинаковый приоритет, ядро использует их поочередно.